/*
 * DIM-SUM操作系统 -- 缓存头文件
 *
 * Copyright (C) 2023 国科础石(重庆)软件有限公司
 *
 * 作者: Dong Peng <w-pengdong@kernelsoft.com>
 *
 * License terms: GNU General Public License (GPL) version 3
 *
 */

#ifndef __ASM_CACHEFLUSH_H
#define __ASM_CACHEFLUSH_H

#include <dim-sum/mm.h>

static inline void local_flush_icache_all(void)
{
	asm volatile ("fence.i" ::: "memory");
}

#define PG_dcache_clean PG_arch_1

#define flush_cache_all() local_flush_icache_all()
#define __flush_dcache_area(addr, len) local_flush_icache_all()
/**
 * lazy模式
 * 此时仅仅清除clean标志
 * 在真正进行页面映射时再刷新
 */
extern void flush_dcache_page(struct page_frame *page);
extern void flush_dcache_range(unsigned long start, unsigned long end);
#define flush_icache_range(start, end) local_flush_icache_all()

static inline void flush_cache_vmap(unsigned long start, unsigned long end)
{

	/**
	 * 开始地址对齐到缓存行
	 */
	flush_icache_range(start, end);
	/**
	 * 内存屏障
	 */
	mb();
	// isb();
}

static inline void flush_cache_vunmap(unsigned long start, unsigned long end)
{
}

#endif
